export interface RequestOptions {
  /** 将请求参数拼接到url */
  joinParamsToUrl?: boolean;
  /** 格式化请求参数时间 */
  formatDate?: boolean;
  /** 是否处理请求结果 */
  isTransformResponse?: boolean;
  /** 是否返回原生响应头 比如：需要获取响应头时使用该属性 */
  isReturnNativeResponse?: boolean;
  /** 公共的接口请求地址 */
  apiUrl?: string | (() => string);
  /** 请求拼接路径 */
  urlPrefix?: string;
  /** 是否添加时间戳 */
  joinTime?: boolean;
  /** 是否忽略重复请求 */
  ignoreCancelToken?: boolean;
  /** 是否需要携带 token */
  withToken?: boolean;
  // 请求重试机制
  retryRequest?: RetryRequest;
  /** 报错信息是否自定义 */
  errorMessageCustom?: boolean
}

export interface RetryRequest {
  isOpenRetry: boolean;
  count: number;
  waitTime: number;
}

/**
 * @description 请求返回结果类型定义
 * @author wfd
 * @date 2021-05-13 19:35:29
 */
export interface RequestResult<T = any> {
  code: number;
  msg: string;
  data: T;
}

/**
 * @description 上传文件参数定义 multipart/form-data: upload file
 * @author wfd
 * @date 2021-05-13 19:35:42
 */
export interface RequestUploadFileOptions {
  /**  其他参数 */
  data?: Recordable;
  /** 文件参数接口字段名称 */
  name?: string;
  /** 文件 */
  file: File | Blob;
  /** 文件名 */
  filename?: string;
  [key: string]: any;
}

export type Recordable<T = any> = Record<string, T>;

export type AnyFunction<T> = (...args: any[]) => T;
